strpbrk関数は、文字列から文字のセットに含まれる文字を検索し、その位置を返します。
#include <string.h>
char *strpbrk(const char *s, const char *accept);
*sは検索対象文字列を指定します。
*acceptは検索する文字のセットを指定します。
戻り値として、文字セット中の文字と一致した文字の位置(ポインタ)を返します。一致しなかった場合はNULLを返します。
プログラム 例
#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 1024 int main() { FILE *fp; char path[50]; char key_set[11]; char buff[SIZE]; char *buff_ptr; int key_cnt; printf('ファイルのパス名を入力してください ==> '); scanf('%s', path); if ((fp = fopen(path, 'r')) == NULL) { fprintf(stderr, '%sのオープンができませんでした\n', path); exit(EXIT_FAILURE); } printf('検索する文字セットを入力してください(10文字以下) ==> '); scanf('%s', key_set); key_cnt = 0; while(fgets(buff, SIZE, fp) != NULL) { buff_ptr = buff; while (*buff_ptr) { /* 文字セットに有る文字を検索 */ if ((buff_ptr = strpbrk(buff_ptr, key_set)) != NULL) { ++key_cnt; ++buff_ptr; } else { break; } } } fclose(fp); printf('%sファイルには「%s」のセットが%d個ありました\n', path, key_set, key_cnt); return EXIT_SUCCESS; }
例の実行結果
$ cat temp.txt #include <stdio.h> int main() { printf('Hello World!!.\n'); return 0; } $ $ ./strpbrk.exe ファイルのパス名を入力してください ==> temp.txt 検索する文字セットを入力してください(10文字以下) ==> (){} temp.txtファイルには「(){}」のセットが6個ありました $ $ ./strpbrk.exe ファイルのパス名を入力してください ==> temp.txt 検索する文字セットを入力してください(10文字以下) ==> ; temp.txtファイルには「;」のセットが2個ありました $ $ ./strpbrk.exe ファイルのパス名を入力してください ==> temp.txt 検索する文字セットを入力してください(10文字以下) ==> WH temp.txtファイルには「WH」のセットが2個ありました $